package com.maochd.platform.domain;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.maochd.platform.exception.SshException;
import lombok.Data;
import lombok.SneakyThrows;

import java.util.Objects;

/**
 * SSH连接信息实体类
 */
@Data
public class SshInfo {
    /**
     * 主机地址
     */
    private String host;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 端口号
     */
    private Integer port;

    /**
     * 连接类型
     */
    private String type;

    /**
     * 密钥
     */
    private String key;

    /**
     * 密钥值
     */
    private String value;

    /**
     * 创建SSH会话
     *
     * @return SSH会话
     * @throws SshException SSH连接异常
     */
    @SneakyThrows
    public Session session() {
        JSch jsch = new JSch();
        try {
            return !Objects.isNull(this.port) && this.port >= 0
                    ? jsch.getSession(this.username, this.host, this.port)
                    : jsch.getSession(this.username, this.host);
        } catch (Exception e) {
            throw new SshException("创建ssh连接失败", e);
        }
    }

    /**
     * 获取SSH会话
     *
     * @return SSH会话
     * @throws SshException SSH连接异常
     */
    @SneakyThrows
    public Session getSession() {
        Session session = this.session();
        if (Objects.isNull(session)) {
            throw new SshException("创建ssh连接失败");
        }
        return session;
    }
}
